/**
 * 交替执行函数； 多个对象不会相互影响；
 * @param function1 执行的函数1
 * @param function2 执行的函数2
 * @constructor
 */
function Toggle(function1, function2) {
    this.state = true;
    this.inverk = new function () {
        if (this.state) {
            function1();
        } else {
            function2()
        }
        this.state = !state;
    }
}

/**
 * 两个函数交替执行；
 * @param function1 执行的函数1
 * @param function2 执行的函数2
 * @param errorFunction 错误的处理方式这个函数有一个实参当前toggle对象；
 *          return true 本次操作不生效；
 * @constructor
 */
function ToggleX(function1, function2,errorFunction) {
    this.isFirst = true;
    // 是否是第一次
    /**
     *  上次按钮的值；用来比对是否是同一个按钮
     * @type {null}
     */
    this.value = null;//
    /**
     *  当前的状态;  为true 执行fun1
     *             为false 执行 fun2
     * @type {boolean}
     */
    this.state = true;
    /**
     * 初始化对象;
     */
    this.init=function () {
        this.isFirst=true;
        this.state=true;
    }
    /**
     * 手动更新的方法；
     * @param value 指定当前的值；
     * @param state 指定状态；
     */
    this.update = function (value,state) {
        this.value=value;
        this.state = state;
        this.isFirst = false;
    };
    /**
     * 执行主方法；
     * @param value 上次的目标；
     */
    this.invoke =  function (value) {
        let that=this;
        if (!this.isFirst) {
            if (this.value != value) {
                let bool=errorFunction();
                if (bool) {
                    //返回值如果为true 本次操作不生效；
                    return;
                }
            }
        }
        // 执行响应的业务；
        if (this.state) {
            this.update(value,false);
            function1(that);
        } else {
            this.update(value,true)
            function2();
        }
        // 更新数据;

    }
}
